package com.knowledge.plus.other.文件操作;

import cn.hutool.core.io.FileUtil;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;

/**
 * 文件操作
 *
 * @author TPF
 * @since 2024/5/10
 */
@RestController
@RequestMapping("file")
public class FileHandler {

    /**
     * 复制文件到指定路径，并转换文件类型。（配合hutool工具使用）
     *
     * @param multipartFile MultipartFile类型
     * @return File类型
     */
    @PostMapping(value = "/copy")
    private File copyFile(@RequestPart("file") MultipartFile multipartFile) {
        try {
            String filename = multipartFile.getOriginalFilename();
            String path = "/home/upload/temp"; // 保存到该路径下
            FileUtil.mkdir(path);
            File file = new File(path + File.separator + filename);
            FileCopyUtils.copy(multipartFile.getBytes(), file);
            return file;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 读取文件（hutool工具）
     */
    @GetMapping("read")
    public List<String> read() {
        String filePath = getClass().getClassLoader().getResource("file/demo.txt").getFile();
        List<String> strList = FileUtil.readLines(new File(filePath), "UTF-8");
        return strList;
    }

    /**
     * 删除文件（hutool工具）
     */
    @GetMapping("delete")
    public void deleteTempFile() {
        String path = "/home/upload/temp"; // 文件所在的文件夹（直接删除文件夹，亦可删除指定文件）
        FileUtil.del(path);
    }

    /**
     * 文件内容追加（hutool工具）
     */
    @GetMapping("append")
    public void appendContent() {
        String content = "不溯往事，不念将来，如此，安好。";
        String path = getClass().getClassLoader().getResource("file/demo.txt").getFile();
        File file = new File(path);
        // FileUtil.appendString("不溯往事，不念将来，如此，安好。", file, "UTF-8");    追加内容
        FileUtil.appendLines(Collections.singletonList(content), file, "UTF-8");    // 追加行
    }

}
